# Copyright 2016-2018 Peter Dimov
# Copyright 2018-2019 Emil Dotchevski
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)

language: cpp

sudo: false

dist: trusty

python: "2.7"

os:
  - linux
  - osx

branches:
  only:
    - master
    - develop
    - /^feature.*/

env:
  matrix:
    - BOGUS_JOB=true

addons:
  apt:
    packages:
      - g++-4.9
      - g++-5
      - g++-6
      - clang-3.6
      - clang-3.7
      - clang-3.8
      - ruby-full
#      - python-3.6
      - ninja-build

    sources:
      - ubuntu-toolchain-r-test
      - llvm-toolchain-precise
      - llvm-toolchain-precise-3.6
      - llvm-toolchain-precise-3.7
      - llvm-toolchain-precise-3.8

matrix:

  exclude:
    - env: BOGUS_JOB=true

  include:

    - os: osx
      osx_image: xcode11.2
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode11.1
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode11
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode10.3
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode10.2
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode10.1
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode10
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode9.4
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode9.3
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode9.2
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode9.1
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode9
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode8.3
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      osx_image: xcode8
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z

    - os: osx
      compiler: clang++
      env: UBSAN=1 TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1

    - os: linux
      compiler: g++-4.7
      env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=98,03,11
      addons:
        apt:
          packages:
            - g++-4.7
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-4.8
      env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=98,03,11
      addons:
        apt:
          packages:
            - g++-4.8
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-4.9
      env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=98,03,11
      addons:
        apt:
          packages:
            - g++-4.9
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-5
      env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - g++-5
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-6
      env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - g++-6
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-7
      env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=98,03,11,14,17
      addons:
        apt:
          packages:
            - g++-7
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-8
      env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=98,03,11,14,17
      addons:
        apt:
          packages:
            - g++-8
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-9
      env: TOOLSET=gcc COMPILER=g++-9 CXXSTD=98,03,11,14,17,2a
      addons:
        apt:
          packages:
            - g++-9
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-9
      env: UBSAN=1 TOOLSET=gcc COMPILER=g++-9 CXXSTD=98,03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold
      addons:
        apt:
          packages:
            - g++-9
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: /usr/bin/clang++
      env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=98,03,11
      addons:
        apt:
          packages:
            - clang-3.3

    - os: linux
      compiler: /usr/bin/clang++
      env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=98,03,11
      addons:
        apt:
          packages:
            - clang-3.4

    - os: linux
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=98,03,11

    - os: linux
      compiler: clang++-3.5
      env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - clang-3.5
            - libstdc++-4.9-dev
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-3.6
      env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - clang-3.6
            - libstdc++-4.9-dev
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-3.7
      env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - clang-3.7
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.7

    - os: linux
      compiler: clang++-3.8
      env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - clang-3.8
            - libstdc++-4.9-dev
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-3.9
      env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - clang-3.9
            - libstdc++-4.9-dev
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-4.0
      env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - clang-4.0
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-trusty-4.0

    - os: linux
      compiler: clang++-5.0
      env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=98,03,11,14,1z
      addons:
        apt:
          packages:
            - clang-5.0
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-trusty-5.0

    - os: linux
      compiler: clang++-6.0
      env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=98,03,11,14,17
      addons:
        apt:
          packages:
            - clang-6.0
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-trusty-6.0

    - os: linux
      compiler: clang++-7
      env: TOOLSET=clang COMPILER=clang++-7 CXXSTD=98,03,11,14,17,2a
      addons:
        apt:
          packages:
            - clang-7
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-trusty-7

    - os: linux
      compiler: clang++-8
      env: TOOLSET=clang COMPILER=clang++-8 CXXSTD=98,03,11,14,17,2a
      addons:
        apt:
          packages:
            - clang-8
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-trusty-8

    - os: linux
      dist: xenial
      compiler: clang++-9
      env: TOOLSET=clang COMPILER=clang++-9 CXXSTD=98,03,11,14,17,2a
      addons:
        apt:
          packages:
            - clang-9
          sources:
            - ubuntu-toolchain-r-test
            - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
              key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'

    - os: linux
      compiler: clang++-8
      env: UBSAN=1 TOOLSET=clang COMPILER=clang++-8 CXXSTD=98,03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1
      addons:
        apt:
          packages:
            - clang-8
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-trusty-8

install:
  - gem install asciidoctor
  - gem install coderay
  - cd ..
  - git clone -b master --depth 1 https://github.com/boostorg/boost.git boost-root
  - cd boost-root
  - git submodule update --init tools/build
  - git submodule update --init tools/inspect
  - git submodule update --init libs/config
  - git submodule update --init tools/boostdep
  - rm -rf libs/exception
  - mkdir libs/exception
  - cp -r $TRAVIS_BUILD_DIR/* libs/exception
  - python tools/boostdep/depinst/depinst.py exception
  - ./bootstrap.sh
  - ./b2 headers
  - cd libs/exception

script:
  - |-
    echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
  - ../../b2 test toolset=$TOOLSET cxxstd=$CXXSTD variant=debug,release ${UBSAN:+cxxflags=-fsanitize=address,undefined cxxflags=-fno-sanitize-recover=address,undefined linkflags=-fsanitize=address,undefined debug-symbols=on} ${LINKFLAGS:+linkflags=$LINKFLAGS}
  - ../../b2 exception-handling=off rtti=off test toolset=$TOOLSET cxxstd=$CXXSTD variant=debug,release ${UBSAN:+cxxflags=-fsanitize=address,undefined cxxflags=-fno-sanitize-recover=address,undefined linkflags=-fsanitize=address,undefined debug-symbols=on} ${LINKFLAGS:+linkflags=$LINKFLAGS}

notifications:
  email:
    on_success: always
